#include "EcrireMartiale.h"

#include <sstream>

#include <functional>

//#include "ListeArme.h"

#include "LireMartiales.h"

//#include "Martiale.h"

//#include "debugstreams.h"

#include <stdlib.h>

using namespace std;

EcrireMartiale::EcrireMartiale()
  : ADDObjetBase( "EcrireMartiale" ), compteur( 0 )
{
  // StatusCode sc( listeArmesXML.init() );
  // if ( ! sc )
  //   {
  //     error() << sc.message() << endl
  // 	      << "Impossible de récupérer la liste d'armes" << endmsg;
  //     exit( 1 );
  //   }
  const LireMartiales * liste = UniqueLireMartiales::instance();

  if ( liste == 0 )
    {
      error() << "Impossible de récupérer la liste d'armes" << endmsg;
      exit( 1 );
    }

  ptr = liste -> listeArmes();
}

EcrireMartiale::~EcrireMartiale()
{}

/**
 * Permet d'écrire la compétence martiale dans le flot désiré. Est
 * utilisé pour l'affichage des compétences martiales dans la feuille
 * de perso.
 *
 * On affiche le nom, ainsi que tous les autres données sur l'arme
 * dans un élément de tableau. Lorsque le nombre de compétences
 * devient important, on sépare le tableau automatiquement.
 *
 * @param[in] i numéro de la compétence martiale à afficher. Si cette
 * compétence possède des "sous-compétences", elles sont
 * automatiquement ajoutées.
 *
 * @return chaîne de caractère correspondant à la ligne (ou les
 * lignes) du tableau des compétences martiales.
 */
string EcrireMartiale::operator()( const unsigned& i )
{
  stringstream ss;
  bool doitCouper( false );

  unsigned j(i);

  do
    {
      ss << ptr -> at(j);
      j++;
      compteur++;
      doitCouper = (compteur % 50 == 0);
    }
  while( ptr -> at(j - 1) . afficherSuite() );

  if ( doitCouper )
    {
      ss << endl << "\\end{tabular*}" << endl;
      ss << "\\begin{tabular*}{14cm}{@{\\extracolsep{\\fill}}"
	 << " l l l l l l l l l}" << endl
	 << "Arme & Poids & Taille & Type & Init. & Tir &"
	 << " Portée & Dégâts PM & Dégâts G \\\\" << endl
	 << "\\hline";
    }

  return ss.str();
}
